package com.ucode.model.hrm;

import com.ucode.model.hrm.enums.HrmEmploymentTypeEnum;
import com.ucode.tool.base.BaseTenantMode;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

/**
 * 员工表
 * @Author: liliang
 * @Date: 2025/3/26 15:54
 * @Version: 1.0
 */
@Schema(description = "人力资源管理系统 - 员工表")
@Data
@EqualsAndHashCode
@ToString(callSuper = true)
public class HrmEmployee extends BaseTenantMode<Long,Long> {
    /**
     * 会员ID，一对一
     */
    private Long memberId;
    /**
     * 关联简历ID(可选)
     */
    private Long resumeId;
    /**
     * 真实姓名
     */
    private String realName;
    /**
     * 性别：0-未填，1-男，2-女
     */
    private Integer gender;
    /**
     * 头像
     */
    private String avatar;
    /**
     * 民族
     */
    private String ethnicity;
    /**
     * 出生日期
     */
    private LocalDate birthDate;
    /**
     * 学历
     * @see com.ucode.tool.base.enums.EducationLevelEnum
     */
    private Integer education;
    /**
     * 婚姻状况
     * @see com.ucode.tool.base.enums.MaritalStatusEnum
     */
    private Integer maritalStatus;
    /**
     * 政治面貌
     * @see com.ucode.tool.base.enums.PoliticalStatusTypeEnum
     */
    private Integer politicalStatus;
    /**
     * 入党时间
     */
    private LocalDate entryTime;
    /**
     * 英语水平
     */
    private String englishProficiency;
    /**
     * 其他语言
     */
    private String otherLanguages;
    /**
     * 驾驶证类型
     * @see com.ucode.tool.base.enums.DriversLicenseEnum
     */
    private String driversLicenseType;
    /**
     * 身高(cm)
     */
    private Integer height;

    /**
     * 体重(kg)
     */
    private BigDecimal weight;
    //户籍信息
    /**
     * 户口类型(农业/非农业)
     */
    private String householdType;
    /**
     * 户籍所在地(户籍)
     */
    private String registeredResidence;
    /**
     * 户籍所在地详细地址
     */
    private String detailedAddress;
    /**
     * 现在居住地址(现居住)
     */
    private String residentialAddress;
    //紧急联系人
    /**
     * 紧急联系人姓名
     */
    private String cnontactName;
    /**
     * 紧急联系人与本人关系（父母/配偶/子女/朋友等）
     */
    private String relationship;
    /**
     * 紧急联系人联系电话
     */
    private String cnontactPhone;
    /**
     * 紧急联系人姓名
     */
    private String cnontactName1;
    /**
     * 紧急联系人与本人关系（父母/配偶/子女/朋友等）
     */
    private String relationship1;
    /**
     * 紧急联系人联系电话
     */
    private String cnontactPhone1;

    //教育经历
    private List<HrmStudyExperience> studyExperiences;
    //家庭成员
    private List<HrmFamilyMember> familyMembers;
    //工作经历
    private List<HrmWorkExperience> workExperiences;
    // 员工图片资料
    private HrmEmployeePicInfo pictureInfo;

    /**
     * 身份证号
     */
    private String idCardNumber;
    /**
     * 电话
     */
    private String phone;
    /**
     * 邮箱
     */
    private String email;
    /**
     * 入职日期
     */
    private LocalDate hireDate;
    /**
     * 试用结束日期
     */
    private LocalDate trialEndDate;
    /**
     * 合同到期日期
     */
    private LocalDate contractEndDate;
    /**
     * 转正日期
     */
    private LocalDate regularizationDate;
    /**
     * 离职日期
     */
    private LocalDate resignationDate;
    /**
     * 离职原因
     */
    private String resignReason;
    /**
     * 离职类型:1-个人原因，2-协商一致，3-甲方原因
     */
    private Integer resigType;
    /**
     * 是否有经济补偿金
     */
    private Boolean economic;
    /**
     * 经济补偿金
     */
    private BigDecimal compensation;
    /**
     * 补偿费用总金额
     */
    private BigDecimal comFeeTotal;
    /**
     * 补偿金发放时间
     */
    private LocalDate comProvideTime;
    /**
     * 编制类型
     * @see HrmEmploymentTypeEnum
     */
    private Integer employmentType;

    /**
     * 入职客户公司ID
     */
    private Long companyId;
    /**
     * 入职客户公司项目ID
     */
    private Long projectId;
    /**
     * 自定义用工单位
     */
    private String customCompany;
    /**
     * 入职外部部门名称
     */
    private String departmentName;
    /**
     * 入职外部职位名称
     */
    private String positionName;
    /**
     * 工作地点
     */
    private String workLocation;
    /**
     * 合同编号
     */
    private Long contractId;

    /**
     * 合同类型：1-入职合同，2-续签合同
     */
    private Integer contractType;
    /**
     * 合同状态
     * @see com.ucode.model.hrm.enums.HrmEmployeeContractStatusEnum
     */
    private Integer contractStatus;
    /**
     * 考勤打卡配置ID
     */
    private Long attCfgId;
    /**
     * 社保缴纳开始时间（入职的时候填写）
     */
    private LocalDate sspStartTime;
    /**
     * 社保缴纳结束时间（离职的时候填写）
     */
    private LocalDate sspEndTime;
    /**
     * 社保处理标记
     * 变化说明：
     * 1、入职后待缴纳社保时，为false，处理完毕后为true
     * 2、离职时，为false，处理完毕后为true
     */
    private Boolean sspMark;

}
